﻿<?xml version="1.0" encoding="utf-8" ?>
<schema 
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:maml="http://ddue.schemas.microsoft.com/authoring/2003/5"
		xmlns:doc="http://ddue.schemas.microsoft.com/authoring/internal"
        targetNamespace="http://ddue.schemas.microsoft.com/authoring/2003/5" 
        blockDefault="#all" 
        elementFormDefault="qualified" 
        attributeFormDefault="unqualified"
        xml:lang="en"
    >

    <!-- Schema documentation -->
    <annotation>
        <documentation>
            This schema describes MAML, the Microsoft Assistance Markup Language.
            MAML is intended for software documentation. In particular, it is 
            intended to accomodate the needs of Microsoft documentation.
        </documentation>
        <documentation>
            The schema is broken into three main areas: end user, developer and
            IT Pro. These areas adequaltely categorize Microsoft
            documentation.
        </documentation>
        <documentation>
         The namespace uri for this version of Maml is: http://ddue.schemas.microsoft.com/authoring/2003/5.
         Each backwards-incompatible revision to Maml will require that the date fields be appropriately
         incremented in uri of the updated version of the Maml schema.
        </documentation>
    </annotation>

    <annotation>
        <documentation>
            This portion of the schema was created by alexstoc in April 2003.
        </documentation>
    </annotation>

    <include schemaLocation="baseConditional.xsd"/>
    <include schemaLocation="inline.xsd"/>
    <include schemaLocation="block.xsd"/>
    <include schemaLocation="structure.xsd"/>
    <include schemaLocation="developerStructure.xsd"/>


    <!-- ************ Start of assembly ************ -->

    <element name="assemblyName" type="token">
        <annotation>
            <documentation>
            </documentation>
            <appinfo>
                <doc:localizable>false</doc:localizable>
				<doc:type>paragraph</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="assemblyVersion" type="token">
        <annotation>
            <documentation>
            </documentation>
            <appinfo>
                <doc:localizable>false</doc:localizable>
				<doc:type>paragraph</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="assemblyCulture" type="token">
        <annotation>
            <documentation>
            </documentation>
            <appinfo>
                <doc:localizable>false</doc:localizable>
				<doc:type>paragraph</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="assemblyPublicKey" type="token">
        <annotation>
            <documentation>
            </documentation>
            <appinfo>
                <doc:localizable>false</doc:localizable>
				<doc:type>paragraph</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="assemblyHash" type="token">
        <annotation>
            <documentation>
            </documentation>
            <appinfo>
                <doc:localizable>false</doc:localizable>
				<doc:type>paragraph</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="assemblyType" mixed="false">
        <sequence>
            <element ref="maml:assemblyName"/>
            <element ref="maml:assemblyVersion" minOccurs="0"/>
            <element ref="maml:assemblyCulture" minOccurs="0"/>
            <element ref="maml:assemblyPublicKey" minOccurs="0"/>
            <element ref="maml:assemblyHash" minOccurs="0"/>
        </sequence>
    </complexType>
    
    <element name="assembly" type="maml:assemblyType">
        <annotation>
            <documentation>
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <!-- ************ End of assembly ************ -->
    
    <element name="internalOnly" type="maml:emptyType">
        <annotation>
            <documentation>
            This element is used to mark code entities that are only
            intended for internal use and are not intended to be used
            by external developers. This element should be used rarely.
            The desire to use this element may indicate a design problem 
            with the library that should be fixed by the internal developers
            before the product is released.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <element name="useBase" type="maml:emptyType">
        <annotation>
            <documentation>
            This element is used to mark code entities that should use the documentation
            of its base.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="returnValue" type="maml:sectionContentType">
        <annotation>
            <documentation>
            This element contains a description of the return value of a function or property.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="threadSafety" type="maml:sectionContentType">
        <annotation>
            <documentation>
            This element contains a discussion of the thread safety characteristics of the current item.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="notesForImplementers" type="maml:sectionContentType">
        <annotation>
            <documentation>
            This element contains information that is only relevant to implementers of the current item.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="notesForCallers" type="maml:sectionContentType">
        <annotation>
            <documentation>
            This element contains information that is only relevant to callers of the current item.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="notesForInheritors" type="maml:sectionContentType">
        <annotation>
            <documentation>
            This element contains information that is only relevant to inheritors of the current item.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="codeReferenceDescriptionType" mixed="false">
        <sequence>
            <element ref="maml:codeEntityReference"/>
            <element ref="maml:content"/>
        </sequence>
    </complexType>
    
    <complexType name="parameterReferenceDescriptionType" mixed="false">
        <sequence>
            <element ref="maml:parameterReference"/>
            <element ref="maml:content"/>
        </sequence>
    </complexType>
    
    <element name="clsCompliantAlternative" type="maml:codeReferenceDescriptionType">
        <annotation>
            <documentation>
            This is a reference to another code entity that performs a 
            function similar to that of the current code entity. Unlike the 
            current entity, the target of the reference is CLS-compliant.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="equivalentCodeEntity" type="maml:codeReferenceDescriptionType">
        <annotation>
            <documentation>
            This is a reference to another code entity that performs
            the same function as the current code entity. It is typically used
            for mapping from an operator to the equivalent function (such as 
            from op_Equality to Equals).
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="obsoleteCodeEntity" type="maml:codeReferenceDescriptionType">
        <annotation>
            <documentation>
            This is used to indicate that a code entity is obsolete.It may contain
	    a reference to another code entity that users are encouraged to use instead of the
            current code entity.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="unmanagedCodeEntity" type="maml:codeReferenceDescriptionType">
        <annotation>
            <documentation>
		It may contain a reference to a unmanaged code entity.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="genericParameter" type="maml:parameterReferenceDescriptionType">
        <annotation>
            <documentation>
            This element contains a description of a generic or template parameter.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="genericParametersType" mixed="false">
        <sequence>
            <element ref="maml:genericParameter" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="genericParameters" type="maml:genericParametersType">
        <annotation>
            <documentation>
            This element is a collection of genericParameter elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="parameter" type="maml:parameterReferenceDescriptionType">
        <annotation>
            <documentation>
            This element contains a description of a functional parameter.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="parametersType" mixed="false">
        <sequence>
            <element ref="maml:parameter" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="parameters" type="maml:parametersType">
        <annotation>
            <documentation>
            This element is a collection of parameter elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="exception" type="maml:codeReferenceDescriptionType">
        <annotation>
            <documentation>
            This element contains a description of one type of exception.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="exceptionsType" mixed="false">
        <sequence>
            <element ref="maml:exception" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="exceptions" type="maml:exceptionsType">
        <annotation>
            <documentation>
            This element is a collection of exception elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <element name="permission" type="maml:codeReferenceDescriptionType">
        <annotation>
            <documentation>
            This element holds a discussion of a particular permission required
            to use the current code element.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="permissionsType" mixed="false">
        <sequence>
            <element ref="maml:permission" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="permissions" type="maml:permissionsType">
        <annotation>
            <documentation>
            This element is a collection of permission elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="platformNoteType" mixed="false">
        <sequence>
            <element ref="maml:platforms"/>
            <element ref="maml:content"/>
        </sequence>
    </complexType>

    <element name="platformNote" type="maml:platformNoteType">
        <annotation>
            <documentation>
            This element contains a collection of platforms
            along with a discussion of the behavior of the current code entity on those platforms.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="platformNotesType" mixed="false">
        <sequence>
            <element ref="maml:platformNote" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="platformNotes" type="maml:platformNotesType">
        <annotation>
            <documentation>
            This element is a collection of platformNote elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>

    <complexType name="codeEntityType" mixed="false">
        <sequence>
            <element ref="maml:codeEntityReference"/>
		<choice maxOccurs="unbounded">
        	    <element ref="maml:internalOnly" minOccurs="0"/>
	            <element ref="maml:useBase" minOccurs="0"/>
        	    <element ref="maml:clsCompliantAlternative" minOccurs="0"/>
	            <element ref="maml:equivalentCodeEntity" minOccurs="0"/>
        	    <element ref="maml:obsoleteCodeEntity" minOccurs="0"/>
	            <element ref="maml:unmanagedCodeEntity" minOccurs="0"/>
		</choice>
            <element ref="maml:summary" minOccurs="0"/>
            <element ref="maml:genericParameters" minOccurs="0"/>
            <element ref="maml:parameters" minOccurs="0"/>
            <element ref="maml:returnValue" minOccurs="0"/>
            <element ref="maml:exceptions" minOccurs="0"/>
            <element ref="maml:threadSafety" minOccurs="0"/>
            <element ref="maml:remarks" minOccurs="0"/>
            <element ref="maml:notesForImplementers" minOccurs="0"/>
            <element ref="maml:notesForCallers" minOccurs="0"/>
            <element ref="maml:notesForInheritors" minOccurs="0"/>
            <element ref="maml:platformNotes" minOccurs="0"/>
            <element ref="maml:codeExamples" minOccurs="0" />
            <element ref="maml:permissions" minOccurs="0"/>
            <element ref="maml:relatedTopics" minOccurs="0"/>
        </sequence>
    </complexType>
    
    <element name="codeEntity" type="maml:codeEntityType">
        <annotation>
            <documentation>
            This element contains the documentation for a single code entity.
            A code entity is a type, member, or overload-set.
            The code entity is identified by the one and only codeEntityReference element
            that is a child of this element.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
    <complexType name="codeEntitiesType" mixed="false">
        <sequence>
            <element ref="maml:codeEntity" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    
    <element name="codeEntities" type="maml:codeEntitiesType">
        <annotation>
            <documentation>
            This element is a simple collection of codeEntity elements.
            </documentation>
            <appinfo>
                <doc:localizable>n/a</doc:localizable>
				<doc:type>section</doc:type>
			</appinfo>
        </annotation>
    </element>
    
</schema>